require(["config"],function(){
	require(["jquery","template","docHeader","cookie"],function($,template){
		function Cart(){
			this.products = null;//保存购物车的商品数量结构
			this.load();
			this.addListener();
		}
		
		Cart.prototype={
			constructor:Cart,
			// 加载，渲染页面，如果有选购的购物车商品，
			// 则显示商品信息，如果没有，则显示空的提示
			load:function(){
				// 配置 cookie 插件自动转换 JS 与 JSON
				$.cookie.json = true;
				// 读取cookie中保存的购物车
				var products = this.products = $.cookie("cart") || [];
//				console.log(products);
				var guczl=this.products.length;
				$("#shopping .zongliang").text(guczl);
				// 判断是否有购物车商品
				if (products.length === 0) { // 购物车为空
					$(".empty").show().siblings(".not-empty").hide();
					return;
				}
				// 购物车非空
				$(".empty").hide().siblings(".not-empty").removeClass("hidden");
				// 渲染模板
				var data = {products: products};
//				console.log(data);
				var html = template("cart-body-template", data);
				$(".cart-table tbody").html(html);
			},
			// 注册事件监听
			addListener:function(){
//				console.log($(".cart-table tbody"));
				//删除
				$(".cart-table tbody").on("click",".del",$.proxy(this.delHandler,this));
				//+/-数量
				$(".cart-table tbody").on("click",".decrement,.increment",$.proxy(this.decIncHandler,this));
				//输入数量
				$(".cart-table tbody").on("blur",".amount",$.proxy(this.inputHandler,this));
				//全选
				$(".ck_all").on("click",$.proxy(this.ckAllHandler,this));
				//单选
				$(".cart-table tbody").on("click",".ck_prod",$.proxy(this.ckProdHandler,this));
				//结算
				$(".cart-table tfoot").on("click",".info_btn",$.proxy(this.ckSettlement,this));
				//清空购物车
				$("#shopping .clear").on("click",$.proxy(this.clearProduct,this));
			},
			//删除单行
			delHandler:function(event){
				//获取事件源DOM元素
				var src=event.target;
				//获取事件源元素所在行
				var tr=$(src).parents("tr");
				//获取商品id
				var id=tr.find(".id").text();
				//从数组中删除该id对应的商品
				this.products=this.products.filter(function(prod){
//					return !(prod.id==id);
					if (prod.id==id)
						return false;
					return true;
				});
//				console.log(this.products);
				//从cookie中保存的购物车结构中删除商品数据
				$.cookie("cart",this.products,{expires:10,path:"/"});
				var guczl=this.products.length;
//				console.log(guczl);
				$("#shopping .zongliang").text(guczl);
				//从DOM树中删除DOM行结构
				tr.remove();
				// 计算合计
				this.calcTotal();
				//计算选中个数
				this.xuanDiscount();
				// 判断是否有购物车商品
				if (this.products.length === 0) { // 购物车为空
					$(".empty").show().siblings(".not-empty").hide();
					return;
				}
			},
			//+/-数量
			decIncHandler:function(event){
				var src=event.target;
				//事件源元素所在行
				var tr=$(src).parents("tr");
				//商品id
				var id=tr.find(".id").text();
				//商品对象
				var product=this.products.filter(function(prod){
					if (prod.id==id)
						return true;
					return false;
				})[0];
				console.log(product);
				//+、-数量
				if ($(src).is(".decrement")){
					if (product.amount<=1)//-
						return;
					product.amount--;
				}else{//+
					product.amount++;
				}
				// 保存到 cookie 中（修改数量后的数组）
				$.cookie("cart", this.products, {expires:10, path:"/"});
				
				//页面渲染
				tr.find(".amount").val(product.amount);
				tr.find(".sub").text(product.amount*product.price);
				// 计算合计
				this.calcTotal();
				//计算优惠
				this.calcDiscount();
			},
			//输入数量
			inputHandler:function(event){
				//事件源
				var src=event.target;
				//所在行
				var tr=$(src).parents("tr");
				//商品id
				var id=tr.find(".id").text();
				//商品对象
				var product=this.products.filter(prod=>prod.id==id)[0];
				//数量修改
				var _amount=$(src).val();
				var reg=/^[1-9]\d*$/;
				if (!reg.test(_amount)){//格式有问题
					$(src).val(product.amount);
					return;
				}
				product.amount=_amount;
				// 保存到 cookie 中
				$.cookie("cart", this.products, {expires:10, path:"/"});
				//显示小计
				tr.find(".sub").text(product.amount*product.price);
				// 计算合计
				this.calcTotal();
			},
			//全选
			ckAllHandler:function(event){
//				var status=$(event.target).attr("checked");//通过element.getAttrbute("checked")
				var status=$(event.target).prop("checked");//element.checked
//				console.log(status);
				// 将各商品行前复选框选中状态设置为全选的选中状态
				$(".ck_prod").prop("checked",status);
				//计算合计
				this.calcTotal();
				//计算选中个数
				this.xuanDiscount();
				//计算优惠
				this.calcDiscount();
			},
			//部分选中
			ckProdHandler:function(event){
				//获取购物车中已选中的复选框个数
				var count=$(".ck_prod:checked").length;
				//console.log(count);
//				$(".ck_all").prop("checked",count===this.products.length);
				var status=count===this.products.length;
				//console.log(status);//返回值是false
				$(".ck_all").prop("checked",status);
				// 计算合计
				this.calcTotal();
				//计算选中个数
				this.xuanDiscount();
				//计算优惠
				this.calcDiscount();
			},
			//计算合计金额
			calcTotal:function(){
				// 将选中行中的小计金额累加
				var sum=0;
				// 选中行中的复选框
				$(".ck_prod:checked").each(function(index,element){
//					console.log(index,element,this,element==this);
					sum+=Number($(this).parents("tr").find(".sub").text());
				});
				//显示
				$(".total").text(sum);
			},
			//计算优惠价格
			calcDiscount:function(){
				var oriprice=0,
					price=0;
				$(".ck_prod:checked").each(function(index,element){
					oriprice+=(Number($(this).parents("tr").find(".oriprice").text()))*(Number($(this).parents("tr").find(".amount").val()));
					price+=(Number($(this).parents("tr").find(".price").text()))*(Number($(this).parents("tr").find(".amount").val()));
				});
				var discount=oriprice-price;
				$("#shopping .discount").text(discount);
			},
			//选中商品的个数
			xuanDiscount:function(){
				var count=$(".ck_prod:checked").length;
				$("#shopping .choose").text(count);
			},
			//结算已选商品
			ckSettlement:function(){
				var yxProduct=[];
				// 获取当前选购商品的信息
				$(".ck_prod:checked").each(function(index,element){
					id=$(this).parents("tr").find(".id").text();
					img=$(this).parents("tr").find(".img").attr("src");
					title=$(this).parents("tr").find(".title").text();
					oriprice=$(this).parents("tr").find(".oriprice").text();
					price=Number($(this).parents("tr").find(".price").text());
					amount=Number($(this).parents("tr").find(".amount").val());
					sub=$(this).parents("tr").find(".sub").text();
					var checkedProduct={
						id,
						title,
						img,
						oriprice,
						price,
						amount,
						sub,
					}
					yxProduct.push(checkedProduct);
				});
				console.log(yxProduct);
				$.cookie.json=true;// 配置自动在JS值与JSON文本之间相互转换
				$.cookie("cars", yxProduct, {expires: 10, path:"/"});
			},
			//清空购物车
			clearProduct:function(){
				// 配置 cookie 插件自动转换 JS 与 JSON
				$.cookie.json = true;
				// 读取cookie中保存的购物车
				var products = this.products = $.cookie("cart") || [];
				var yxProduct=this.yxProduct= $.cookie("cars") || [];
				//给结算页面的购物车赋值
				yxProduct.length=0;
				//给购物车长度赋值
				products.length=0;
				//从cookie中保存的购物车结构中删除商品数据
				$.cookie("cart",this.products,{expires:10,path:"/"});
				$.cookie("cars",this.yxProduct,{expires:10,path:"/"});
				// 判断是否有购物车商品
				if (products.length === 0) { // 购物车为空
					$(".empty").show().siblings(".not-empty").hide();
					return;
				}
			}
		}
		
		new Cart();
	});
});
